package cli

import (
	"fmt"
	"os"
	"strings"

	"gitee.com/Gakusyun/gakusyun-ws/version"
)

// Action CLI 动作类型
type Action int

const (
	ActionRun     Action = iota // 正常运行服务器
	ActionVersion               // 显示版本信息
	ActionHelp                  // 显示帮助信息
)

// ParsedArgs 解析后的命令行参数
type ParsedArgs struct {
	Action  Action
	Invalid bool // 是否包含无效参数
}

// ParseArgs 解析命令行参数
func ParseArgs() *ParsedArgs {
	args := os.Args[1:] // 跳过程序名

	if len(args) == 0 {
		return &ParsedArgs{Action: ActionRun}
	}

	for _, arg := range args {
		switch strings.ToLower(arg) {
		case "-v", "--version":
			return &ParsedArgs{Action: ActionVersion}
		case "-h", "--help", "/?", "/help":
			return &ParsedArgs{Action: ActionHelp}
		default:
			// 任何未识别的参数都视为无效，触发帮助
			return &ParsedArgs{Action: ActionHelp, Invalid: true}
		}
	}

	return &ParsedArgs{Action: ActionRun}
}

// ShowVersion 显示版本信息
func ShowVersion() {
	fmt.Println(version.GetVersionString())
}

// ShowHelp 显示帮助信息
func ShowHelp(invalidArgs bool) {
	if invalidArgs {
		fmt.Println("错误: 未识别的命令行参数")
		fmt.Println()
	}

	fmt.Println("GSWS - Gakusyun Static Web Server")
	fmt.Println()
	fmt.Println("用法:")
	fmt.Println("  gsws [选项]")
	fmt.Println()
	fmt.Println("选项:")
	fmt.Println("  -v, --version    显示版本信息并退出")
	fmt.Println("  -h, --help       显示此帮助信息并退出")
}

// ExecuteAction 执行相应的动作
func ExecuteAction(args *ParsedArgs) bool {
	switch args.Action {
	case ActionVersion:
		ShowVersion()
		return false // 不继续运行服务器
	case ActionHelp:
		ShowHelp(args.Invalid)
		return false // 不继续运行服务器
	case ActionRun:
		return true // 继续运行服务器
	default:
		ShowHelp(true)
		return false
	}
}
